perm filename HHT5.FAI[CMS,LCS] blob sn#404772 filedate 1978-12-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00016 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	 LOAD THIS FILE AND SAVE AS  "HHT.DMP"
C00005 00003	 Reset
C00007 00004	 REFRESH LOOP
C00009 00005	 WAIT LOOP AND SETUP
C00012 00006	 UPDATE SCREEN
C00014 00007	 KB INTERRUPT ROUTINE
C00017 00008	 RS232 INTERRUPT ROUTINE
C00019 00009	 FOLLOW CURSOR
C00021 00010	 RS232 CONTROL
C00023 00011	 SCROLL UP
C00024 00012	 CK IF IN WINDOW
C00026 00013	 HOME CURSOR.
C00028 00014	 ASCII TABLE	BITS     7    6   5  4  3   2   1   0
C00031 00015	CHR GEN		 = GRAPHICS
C00035 00016	CGEN2:	000 ↔ 017 ↔ 177 ↔ 170 ↔ 010 ↔ 010 ↔ 010 ↔ 000
C00039 ENDMK
C⊗;
; LOAD THIS FILE AND SAVE AS  "HHT.DMP"
; THEN EX CON11.FAI[CMS,LCS] TO CONVERT TO PDP-11 LOADER FORMAT
; FINAL FILE IS "LOAD11.HHT"

;		BIT RATE GEN CODES
;	0 = 0			10 = 9600
;	1 = 19.2K		11 = 4800
;	2 = 50			12 = 1800
;	3 = 75			13 = 1200
;	4 = 134.5		14 = 2400
;	5 = 200			15 = 300
;	6 = 600			16 = 150
;	7 = 2400		17 = 110

	TITLE HHT
	.INSERT	ASMBL.FAI[CMS,LCS]

	CPL ← = 28	;CHRS PER LINE
	NCHRS ← = 112	;CHRS PER SCREEN
	
; Zpage ram
   LOC 0
	COL:	0
	CUR:	0
		0
	WINDOW:	0
		0

	TMP:	0
		0
	LINL:	0
	CHRL:	0
	BRT:	0

	NWAIT:	0
	UPFLG:	0
	CURVIS:	0
	DIS:	0
		0
	SHIFT:	0
	WINK:	0

	SHFT:	0	;Keyboard shift flag.
	OFFL:	0	;Off delay count low.

	LOC 600
REBUF0:	BLOCK = 128	;REFRESH BUFFER
;	LOC 1000
REBUF1:	BLOCK = 128
;	LOC 1200
REBUF2:	BLOCK = 128
;	LOC 1400
REBUF3:	BLOCK = 128
;	LOC 1600
REBUF4:	BLOCK = 128
	BLOCK = 1024

	LOC 4000
ABUF:	0		;ASCII CHR BUF
; Reset
	LOC 174000	;LOC 174000
	RSTA:	LDAI	377	;TURN OFF COLS
		STA	COLREG
		CLD		;CLEAR DECIMAL MODE
		LDXI	177	;STACK DEPTH
		TXS		;SETUP STACK
		LDAI	0	;SET UP BRIGHTNESS
		STAZ	BRT

; SETUP AND CLEAR SCREEN
	;CLEAR ABUF, SETUP CURSOR AND WINDOW
	SD ← 10		;START OF ABUF
	ED ← 14		;END OF ABUF
		JSR	HOME	;SETUP CURSOR
		LDAI	=16	;NUMBER OF LINES IN MEM
		STAZ	TMP
	CLRM:	JSR	LF	;<lf> THEN CLEAR LINE *16
		DECZ	TMP
		BNE	CLRM
; INIT I/O
  ;INIT RS232
	SIODEF ← 225	;UART CONTROL WORD
	ACIAC ← 77776	;UART CONTROL REG ADDRESS
	ACIAD ← 77777	;UART DATA REG ADDRESS
		LDAI	3	;RESET ACIA
		STA	ACIAC
		LDAI	SIODEF	;SETUP DEFAULT I/O CONTROL
		STA	ACIAC
  ;INIT KB SCANER
	KBD ← 23776	;KEYBOARD DATA REGISTER ADDRESS
	KBC ← 23777	;KEYBOARD CONTROL REGISTER ADDRESS
		LDAI	2	;KB DPY MODE SET
		STA	KBC
		LDAI	60	;KB CLK DIV
		STA	KBC

		LDAI	302	;CLEAR KB INTERUPT
		STA	KBC

		LDAI	100	;READ KB
		STA	KBC
		LDXI	377
		STXZ	OFFL	;Setup off delay.
		INX
		STXZ	SHFT	;Reset shift flag.

		CLI		;ENABLE INTERRUPTS
; REFRESH LOOP
	NCHRS ← =112	;NUMBER OF CHRS ON SCREEN
	DPYSR ← 27777	;DISPLAY SHIFT REGISTER ADDRESS

		LDXI	NCHRS-1
	RELOOP:	LDAI	376
		STAZ	COL	;SETUP COL BIT 1
				;				       CY
	SLOOP0:	LDAX	REBUF0	;PUT FIRST COL IN SHIFT			4
		STA	DPYSR	;REGISTER STARTING WITH LAST CHR	4
		DEX		;					2
		BPL	SLOOP0	;				       _3_
		JSR	NXCOL	;TURN ON COL AND WAIT		    5+(13*112)=1461

	SLOOP1:	LDAX	REBUF1	;SECOND
		STA	DPYSR
		DEX
		BPL	SLOOP1
		JSR	NXCOL

	SLOOP2:	LDAX	REBUF2	;THIRD
		STA	DPYSR
		DEX
		BPL	SLOOP2
		JSR	NXCOL

	SLOOP3:	LDAX	REBUF3	;FORTH
		STA	DPYSR
		DEX
		BPL	SLOOP3
		JSR	NXCOL

	SLOOP4:	LDAX	REBUF4	;FIFTH
		STA	DPYSR
		DEX
		BPL	SLOOP4
		JSR	NXCOL

		JMP	RELOOP
; WAIT LOOP AND SETUP
	COLREG ← 33777	;COL ENABLE REGISTER ADDRESS
	SPEED ← = 36	;SPEED OF SHIFT RIGHT IN ms * 2
; TURN ON COL					       CY
	NXCOL:	LDAZ	COL	;			3
		STA	COLREG	;TURN ON COL		4
		SEC		;			2
		ROLZ	COL	;SHIFT FOR NEXT COL	5

; WAIT(BRIGHTNESS)		Tcy = 1488 = .9916 ms
		LDXZ	BRT	;			3
		LDAX	BTBL	;			4
		STAZ	NWAIT	;			4
	WAIT1:	DECZ	NWAIT	;			5
		BNE	WAIT1	;			3

		INCZ	WINK	;			5
		BEQ	BLINK	;TIME TO BLINK		2
	GOWAIT:	LDAX	OFFTBL	;			4
		STAZ	NWAIT	;SETUP OFF WAIT		4
		LDXI	NCHRS-1	;			2
; TURN OFF COL
		LDAI	377	;			2
		STA	COLREG	;TURN OFF COL		4
		LDAZ	UPFLG	;CK IF UPDATE FLAG SET	3
		BNE	CKSHFT	;			2

; WAIT(¬BRIGHTNESS)
	WAIT2:	DECZ	NWAIT	;			5
		BNE	WAIT2	;			3

		RTS		;			6
; BRIGHTNESS TABLES
	BTBL:	=80  ↔ =200
	OFFTBL:	=120 ↔ 1
; BLINK CURSOR
	BLINK:	DECZ	OFFL	;Off delay.
		BNE	SWTCH
		LDAI	377
		STA	COLREG	;Turn off display.
	OFF:	BITZ	OFFL	;Wait until KB or RS232.
		BPL	OFF

	SWTCH:	JSR	SHOCUR	;XOR CURSOR INTO REBUF
		JMP	GOWAIT
; CHECK FOR RIGHT SHIFT
	CKSHFT:	BPL	UPDATE	;CK RIGHT SHIFT FLAG
		DECZ	SHIFT	;SEE IF TIME TO SHIFT
		BNE	WAIT2	;CK UPDATE?
		LDAI	SPEED
		STAZ	SHIFT
		SEI		;MASK OUT INTERRUPTS
		LDYZ	WINDOW
		INY
		TYA
		ANDI	77
		CMPI	45	;CHECK IF AT LEFT EDGE
		BCS	EDGE
		STYZ	WINDOW
		JSR	CKVIS	;SETUP Y INDEX AND DISTANCE
		CLI		;ENABLE INTERUPTS
		JMP	UPDPY

	EDGE:	LDAZ	UPFLG
		ANDI	177	;TURN OFF RIGHT SHIFT FLAG
		STAZ	UPFLG
		CLI		;ENABLE INTERRUPTS
		BEQ	WAIT2	;FALL THROUGH TO UPDATE
; UPDATE SCREEN
	UPDATE:	LDAI	0	;RESET UDATE FLAG
		STAZ	UPFLG
	UPDPY:	LDAZ	WINDOW	;COPY WINDOW INTO TEMP
		STAZ	TMP
		LDAZ	WINDOW+1
		STAZ	TMP+1
		LDAI	4	;NUMBER OF LINES PER SCREEN
		STAZ	LINL
		LDYI	0

	LLOOP:	LDAI	CPL	;28 CHRS TO GO
		STAZ	CHRL

	ULOOP:	LDXI	0
		LDAIX	TMP	;WRITE CHRGEN BITS INTO REBUF
		JSR	WCHR
		INY
		INCZ	TMP
		BNE	CKCHRL
		INCZ	TMP+1
		LDAZ	TMP+1
		CMPI	ED
		BNE	CKCHRL
		LDAI	SD
		STAZ	TMP+1

	CKCHRL:	DECZ	CHRL
		BNE	ULOOP	;MORE CHRS LEFT ON LINE

		LDAZ	TMP
		CLC
		ADCI	44	;100-CPL = NEXT LINE
		STAZ	TMP
		BCC	NOOF
		INCZ	TMP+1
		LDAZ	TMP+1
		CMPI	ED
		BNE	NOOF
		LDAI	SD
		STAZ	TMP+1

	NOOF:	DECZ	LINL
		BNE	LLOOP	;DO NEXT LINE

		JSR	SHOCUR	;SHOW CURSOR IF ON SCREEN
		LDXI	NCHRS-1	;SETUP X
		RTS
; KB INTERRUPT ROUTINE
	KBINT:	PHA		;SAVE REGS
		TXA
		PHA

		LDX	KBD	;GET CHR FROM KB

		LDAI	302	;CLEAR KB INTERUPT
		STA	KBC

		CPXI	300	;Shift key index.
		BNE	SHFTCK
		STXZ	SHFT	;Set shift flag.
		BEQ	KBRTRN	;Jump.
	SHFTCK:	BITZ	SHFT	;Ck if last key = shift
		BPL	CLRIT
		TXA
		ANDI	277	;And out 100 bit.
		TAX
		LDAI	0	;Reset shift flag.
		STAZ	SHFT
	CLRIT:	CLI		;CLEAR INTERUPT MASK

	OWAIT:	LDA	ACIAC
		ANDI	2	;CHECK IF FULL
		BEQ	OWAIT
		LDAX	CHRTBL	;CONVERT KB TO ASCCI
		STA	ACIAD	;OUTPUT IT

	KBRTRN:	LDAI	377
		STAZ	OFFL	;Reset off delay count.

		PLA		;RESTORE REGS
		TAX
		PLA
		RTI		;RETURN
;ERASE CURSOR
	CKERA:	LDYZ	CURVIS
		BMI	NOS	;CK IF ON SCREEN
		LDXI	0
		LDAIX	CUR
; GEN CHR
	WCHR:	TAX		;X ← ASCII CHR
		LDAX	CGEN0	;FILL REBUF COLS 0-4
		STAY	REBUF0
		LDAX	CGEN1
		STAY	REBUF1
		LDAX	CGEN2
		STAY	REBUF2
		LDAX	CGEN3
		STAY	REBUF3
		LDAX	CGEN4
		STAY	REBUF4
	NOS:	RTS
; <bspace>
	BS:	JSR	CKERA	;ERASE OLD CURSOR IF ON SCREEN
		LDAZ	CUR	;DECREMENT CURSOR
		BNE	NOBACK
		DECZ	CUR+1
		LDAZ	CUR+1
		CMPI	SD-1	;CK IF BEFORE BEGINING
		BNE	NOBACK
		LDAI	ED-1	;WRAP AROUND
		STAZ	CUR+1
	NOBACK:	DECZ	CUR
		JMP	CKCUR	;SHOW CURSOR IF ON SCREEN
; CURSOR OFF LINE
	OFFLIN:	DECZ	CUR	;FIX CUR FOR <cr>
		JSR	CR	;<cr>
		JMP	RLF	;<lf>, CK SCROLL AND UPDATE
; RS232 INTERRUPT ROUTINE
	RSINT:	PHA		;SAVE REGS
		TXA
		PHA
		TYA
		PHA

		LDA	ACIAD	;GET CHR FROM ACIA
		ANDI	177	;7 BITS
		BEQ	RSRTRN	;Check for nulls.

		CMPI	30	;CONTROL CODES
		BCC	SCNTRL
		CMPI	10	;<bspace>
		BEQ	BS

	PCHR:	LDXI	0
		STAIX	CUR	;STORE IN ABUF
		LDYZ	CURVIS	;CK IF IN WINDOW
		BMI	INCUR
		JSR	WCHR	;WRITE CHR IN REBUF

	INCUR:	INCZ	CUR	;INCREMENT CURSOR
		LDAZ	CUR
		ANDI	77
		BEQ	OFFLIN	;BRANCH IF OFF END OF LINE

	CKCUR:	JSR	CKVIS	;SHOW CURSOR IF ON SCREEN

		JSR	SHOCUR	;XOR CURSOR INTO REBUF

	RSRTRN:	LDAI	377
		STAZ	OFFL	;Reset off delay count.

		PLA		;RESTORE REGS
		TAY
		PLA
		TAX
		PLA
		RTI		;RETURN
; FOLLOW CURSOR
	FOLLOW:	LDXZ	WINDOW
		LDYZ	WINDOW+1
		LDAZ	CUR
		ANDI	300	;SET CURSOR AT BOTTOM RIGHT OF WINDOW
		SEC
		SBCI	300
		STAZ	WINDOW
		LDAZ	CUR+1
		SBCI	0
		CMPI	SD-1
		BNE	NOTB4
		LDAI	ED-1
	NOTB4:	STAZ	WINDOW+1

		LDAZ	CUR	;SET CURSOR AT RIGHT
		ANDI	77
		CMPI	CPL
		BCC	OK
		SBCI	CPL-1
		ORAZ	WINDOW
		STAZ	WINDOW

	OK:	CPXZ	WINDOW	;UPDATE SCREEN IF DIFFERENT
		BNE	SETFLG
		CPYZ	WINDOW+1
		BNE	SETFLG
		BEQ	RSRTRN

;Oldest text.
	OLDEST:	LDAZ	CUR
		ANDI	300
		CLC
		ADCI	100	;Next line.
		STAZ	WINDOW
		LDAZ	CUR+1
		ADCI	0
		CMPI	ED
		BNE	NOPASS
		LDAI	SD
	NOPASS:	STAZ	WINDOW+1
		BNE	SETFLG	;JUMP.
; RS232 CONTROL
	SCNTRL:	CMPI	26	;CUR ← RIGHT BOTTOM
		BEQ	FOLLOW
		CMPI	12	;<lf>
		BEQ	RLF
		CMPI	15	;<cr>
		BEQ	RCR
		CMPI	13	;SCROLL UP
		BEQ	SCRLU
		CMPI	14	;SCROLL DOWN
		BEQ	SCRLD
		CMPI	22	;TOGGLE BRIGHTNESS
		BEQ	BRIGHT
		CMPI	20	;RIGHT
		BEQ	RIGHT
		CMPI	21	;SET AT LEFT
		BEQ	LEFT
		CMPI	7	;ERROR
		BEQ	JRTRN
		CMPI	27	;Oldest.
		BEQ	OLDEST
		JMP	PCHR	;PRINT IT ANYWAY
; <lf>
	RLF:	JSR	LF	;<lf>
		JMP	SETFLG	;UPDATE SCREEN
; <cr>
	RCR:	JSR	CKERA	;ERASE OLD CURSOR
		JSR	CR
		JMP	CKCUR	;SHOW CURSOR IF ON SCREEN
; SCROLL DOWN
	SCRLD:	LDAZ	WINDOW
		CLC
		ADCI	100	;FOR 64 CHRS
		STAZ	WINDOW
		BCC	SETFLG
		INCZ	WINDOW+1
		LDAZ	WINDOW+1
		CMPI	ED
		BNE	SETFLG
		LDAI	SD
		STAZ	WINDOW+1
	SETFLG:	JSR	CKVIS
		INCZ	UPFLG	;UPDATE SCREEN
	JRTRN:	JMP	RSRTRN	;SET UPDATE FLAG
; SCROLL UP
	SCRLU:	LDAZ	WINDOW
		SEC
		SBCI	100	;64 CHRS PER LINE
		STAZ	WINDOW
		BCS	SETFLG
		DECZ	WINDOW+1
		LDAZ	WINDOW+1
		CMPI	SD-1
		BNE	SETFLG
		LDAI	ED-1
		STAZ	WINDOW+1
		JMP	SETFLG
; BRIGHTNESS
	BRIGHT:	LDAZ	BRT
		ANDI	1
		EORI	1	;TOGGLE
		STAZ	BRT
		JMP	RSRTRN
; SET WINDOW AT LEFT OF PAGE
	LEFT:	LDAZ	WINDOW
		ANDI	300
		STAZ	WINDOW
		LDAI	1	;1 FOR NO RIGHT SHIFT AND UPDATE SCREEN
		STAZ	UPFLG
		JMP	SETFLG
; WINDOW RIGHT
	RIGHT:	LDAZ	UPFLG
		EORI	200	;TOGGLE RIGHT SHIFT BIT
		STAZ	UPFLG
		LDAI	SPEED
		STAZ	SHIFT
		JMP	RSRTRN
; CK IF IN WINDOW
	CKVIS:	LDYI	377	;SET NO SHOW
		LDAZ	CUR	;GET DISTANCE
		SEC
		SBCZ	WINDOW
		STAZ	DIS
		LDAZ	CUR+1
		SBCZ	WINDOW+1
		BCS	CKEQ
		ADCI	4	;IF NEG, ADD BUF LEN
	CKEQ:	STAZ	DIS+1
		BNE	NOTVIS	;NO SHOW IF ≥ 256
		LDAZ	DIS
		ANDI	77
		CMPI	CPL	;NO SHOW IF ≥ 28
		BCS	NOTVIS
		STAZ	CURVIS
		LDAZ	DIS	;GET REBUF INDEX
		ANDI	300
		ROLA
		ROLA
		ROLA
		TAX
		LDAX	ROWTBL	;NLINES * 28
		ADCZ	CURVIS
		TAY
	NOTVIS:	STYZ	CURVIS
		RTS

	ROWTBL:	0
		CPL
		CPL*2
		CPL*3

	SHOCUR:	LDYZ	CURVIS
		BMI	NOSHO
		LDAY	REBUF0	;OR CURSOR INTO CHR
		EORI	100
		STAY	REBUF0
		LDAY	REBUF1
		EORI	100
		STAY	REBUF1
		LDAY	REBUF2
		EORI	100
		STAY	REBUF2
		LDAY	REBUF3
		EORI	100
		STAY	REBUF3
		LDAY	REBUF4
		EORI	100
		STAY	REBUF4
	NOSHO:	RTS
; HOME CURSOR.
	HOME:	LDAI	0	;CURSOR ← WINDOW ← TOP
		STAZ	CUR
		STAZ	WINDOW
		STAZ	CURVIS
		LDAI	SD
		STAZ	CUR+1
		STAZ	WINDOW+1
		STAZ	UPFLG	;SET UPDATE FLAG
		RTS
; <lf> SUBROUTINE
	LF:	LDAZ	CUR
		CLC
		ADCI	100	;CUR ← CUR + 64
		STAZ	CUR
		BCC	CTEOL
		INCZ	CUR+1
		LDAZ	CUR+1
		CMPI	ED
		BNE	CTEOL
		LDAI	SD	;WRAP AROUND
		STAZ	CUR+1
; CLEAR TO END OF LINE.
	CTEOL:	LDAZ	CUR	
		ANDI	77
		EORI	77
		TAY		;Y ← # CHRS LEFT ON LINE
		LDAI	40	;<space>
	CLRL:	STAIY	CUR	;FILL CURSOR TO CURSOR + CPL
		DEY		;WITH SPACES
		BPL	CLRL
		RTS
; <cr> SUBROUTINE
	CR:	LDAZ	CUR	;CUR ← CUR ∧ ¬77
		ANDI	300
		STAZ	CUR
		RTS
; ASCII TABLE	BITS     7    6   5  4  3   2   1   0
;	LOC	176000	CNTL SHFT S2 S1 S0 RL2 RL1 RL0
	LOC	176000
CHRTBL:	
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7  ;CONTROL
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7

	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7  ;CNTL SHFT
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7

	 7   ↔	"?"  ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	"'"  ↔	13  ;SHIFT
	"+"  ↔	"("  ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	42   ↔	26
	"-"  ↔	")"  ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	"@"  ↔	27
	"*"  ↔	"["  ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	"$"  ↔	" "
	"/"  ↔	"]"  ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	":"  ↔	22
	"="  ↔	"%"  ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	";"  ↔	12
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7

	 7   ↔	"#"  ↔	"A"  ↔	"G"  ↔	"M"  ↔	"S"  ↔	"Y"  ↔	14
	"1"  ↔	"6"  ↔	"B"  ↔	"H"  ↔	"N"  ↔	"T"  ↔	"Z"  ↔	20
	"2"  ↔	"7"  ↔	"C"  ↔	"I"  ↔	"O"  ↔	"U"  ↔	"-"  ↔	21
	"3"  ↔	"8"  ↔	"D"  ↔	"J"  ↔	"P"  ↔	"V"  ↔	"!"  ↔	" "
	"4"  ↔	"9"  ↔	"E"  ↔	"K"  ↔	"Q"  ↔	"W"  ↔	"."  ↔	10
	"5"  ↔  "0"  ↔  "F"  ↔  "L"  ↔  "R"  ↔  "X"  ↔  ","  ↔  15
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
;CHR GEN		⊗ = GRAPHICS
;	0	1	2	3	4	5	6	7
;  0/	 	⊗	⊗	⊗	⊗	⊗	⊗	 
; 10/	 	 					 	⊗
; 20/								
; 30/	⊗	⊗	⊗	⊗	⊗	⊗	⊗	⊗
; 40/	 	!	"	#	$	%	&	'
; 50/	(	)	*	+	,	-	.	/
; 60/	0	1	2	3	4	5	6	7
; 70/	8	9	:	;	<	=	>	?
;100/	@	A	B	C	D	E	F	G
;110/	H	I	J	K	L	M	N	O
;120/	P	Q	R	S	T	U	V	W
;130/	X	Y	Z	[	\	]	↑	←
;140/	 	a	b	c	d	e	f	g
;150/	h	i	j	k	l	m	n	o
;160/	p	q	r	s	t	u	v	w
;170/	x	y	z	{	|	 	}	

	LOC 176400	;LOC 176400

CGEN0:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
	010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
	000 ↔ 157 ↔ 003 ↔ 024 ↔ 056 ↔ 043 ↔ 060 ↔ 003
	034 ↔ 101 ↔ 044 ↔ 010 ↔ 100 ↔ 010 ↔ 140 ↔ 040
	076 ↔ 102 ↔ 102 ↔ 042 ↔ 010 ↔ 057 ↔ 060 ↔ 101
	066 ↔ 106 ↔ 146 ↔ 114 ↔ 010 ↔ 024 ↔ 101 ↔ 002
	164 ↔ 176 ↔ 177 ↔ 076 ↔ 177 ↔ 177 ↔ 177 ↔ 076
	177 ↔ 101 ↔ 040 ↔ 177 ↔ 177 ↔ 177 ↔ 177 ↔ 076
	177 ↔ 076 ↔ 177 ↔ 046 ↔ 001 ↔ 077 ↔ 037 ↔ 177
	143 ↔ 003 ↔ 141 ↔ 177 ↔ 002 ↔ 101 ↔ 004 ↔ 010
	000 ↔ 044 ↔ 177 ↔ 070 ↔ 060 ↔ 070 ↔ 010 ↔ 046
	177 ↔ 172 ↔ 040 ↔ 177 ↔ 101 ↔ 174 ↔ 174 ↔ 070
	177 ↔ 006 ↔ 174 ↔ 110 ↔ 004 ↔ 074 ↔ 034 ↔ 074
	104 ↔ 047 ↔ 104 ↔ 010 ↔ 177 ↔ 000 ↔ 101 ↔ 000

CGEN1:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
	010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
	000 ↔ 157 ↔ 000 ↔ 177 ↔ 111 ↔ 023 ↔ 116 ↔ 000
	042 ↔ 042 ↔ 030 ↔ 010 ↔ 040 ↔ 010 ↔ 140 ↔ 020
	121 ↔ 177 ↔ 141 ↔ 101 ↔ 014 ↔ 111 ↔ 110 ↔ 041
	111 ↔ 051 ↔ 146 ↔ 054 ↔ 024 ↔ 024 ↔ 042 ↔ 001
	124 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
	010 ↔ 177 ↔ 100 ↔ 010 ↔ 100 ↔ 002 ↔ 004 ↔ 101
	011 ↔ 101 ↔ 011 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
	024 ↔ 004 ↔ 121 ↔ 101 ↔ 004 ↔ 101 ↔ 002 ↔ 034
	000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 176 ↔ 111
	010 ↔ 000 ↔ 100 ↔ 040 ↔ 177 ↔ 004 ↔ 010 ↔ 104
	006 ↔ 011 ↔ 010 ↔ 124 ↔ 004 ↔ 100 ↔ 040 ↔ 100
	050 ↔ 110 ↔ 144 ↔ 066 ↔ 000 ↔ 000 ↔ 101 ↔ 000
CGEN2:	000 ↔ 017 ↔ 177 ↔ 170 ↔ 010 ↔ 010 ↔ 010 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 170
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 052 ↔ 000 ↔ 000
	170 ↔ 017 ↔ 017 ↔ 170 ↔ 017 ↔ 177 ↔ 177 ↔ 177
	000 ↔ 000 ↔ 003 ↔ 024 ↔ 177 ↔ 010 ↔ 121 ↔ 000
	101 ↔ 034 ↔ 030 ↔ 076 ↔ 000 ↔ 010 ↔ 000 ↔ 010
	111 ↔ 100 ↔ 121 ↔ 101 ↔ 012 ↔ 111 ↔ 114 ↔ 021
	111 ↔ 031 ↔ 000 ↔ 000 ↔ 042 ↔ 024 ↔ 024 ↔ 121
	164 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
	010 ↔ 101 ↔ 100 ↔ 024 ↔ 100 ↔ 004 ↔ 010 ↔ 101
	011 ↔ 121 ↔ 031 ↔ 111 ↔ 177 ↔ 100 ↔ 100 ↔ 020
	010 ↔ 170 ↔ 111 ↔ 101 ↔ 010 ↔ 177 ↔ 177 ↔ 052
	000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 111
	010 ↔ 000 ↔ 100 ↔ 020 ↔ 100 ↔ 170 ↔ 004 ↔ 104
	011 ↔ 011 ↔ 004 ↔ 124 ↔ 077 ↔ 100 ↔ 100 ↔ 074
	020 ↔ 110 ↔ 124 ↔ 101 ↔ 000 ↔ 000 ↔ 076 ↔ 000

CGEN3:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
	000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
	000 ↔ 000 ↔ 000 ↔ 177 ↔ 111 ↔ 144 ↔ 046 ↔ 000
	000 ↔ 000 ↔ 044 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 004
	105 ↔ 000 ↔ 111 ↔ 111 ↔ 177 ↔ 111 ↔ 112 ↔ 011
	111 ↔ 011 ↔ 000 ↔ 000 ↔ 101 ↔ 024 ↔ 010 ↔ 011
	104 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 111
	010 ↔ 000 ↔ 100 ↔ 042 ↔ 100 ↔ 002 ↔ 020 ↔ 101
	011 ↔ 041 ↔ 051 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
	024 ↔ 004 ↔ 105 ↔ 000 ↔ 020 ↔ 000 ↔ 002 ↔ 010
	000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 106
	010 ↔ 000 ↔ 075 ↔ 050 ↔ 000 ↔ 004 ↔ 004 ↔ 104
	011 ↔ 006 ↔ 004 ↔ 124 ↔ 104 ↔ 100 ↔ 040 ↔ 100
	050 ↔ 104 ↔ 114 ↔ 101 ↔ 000 ↔ 000 ↔ 010 ↔ 000

CGEN4:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
	000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
	000 ↔ 000 ↔ 000 ↔ 024 ↔ 062 ↔ 142 ↔ 100 ↔ 000
	000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 002
	076 ↔ 000 ↔ 106 ↔ 066 ↔ 010 ↔ 061 ↔ 061 ↔ 007
	066 ↔ 006 ↔ 000 ↔ 000 ↔ 000 ↔ 024 ↔ 000 ↔ 006
	174 ↔ 176 ↔ 066 ↔ 042 ↔ 076 ↔ 101 ↔ 001 ↔ 072
	177 ↔ 000 ↔ 077 ↔ 101 ↔ 100 ↔ 177 ↔ 177 ↔ 076
	006 ↔ 136 ↔ 106 ↔ 062 ↔ 001 ↔ 077 ↔ 037 ↔ 177
	143 ↔ 003 ↔ 103 ↔ 000 ↔ 040 ↔ 000 ↔ 004 ↔ 010
	000 ↔ 170 ↔ 060 ↔ 104 ↔ 177 ↔ 130 ↔ 002 ↔ 077
	160 ↔ 000 ↔ 000 ↔ 104 ↔ 000 ↔ 170 ↔ 170 ↔ 070
	006 ↔ 177 ↔ 010 ↔ 044 ↔ 104 ↔ 074 ↔ 034 ↔ 074
	104 ↔ 077 ↔ 104 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000

; INTER VECTS
	LOC 177772	;LOC 177772
	NMIV:	KBINT∧377	;NMIV:	ABSO KBINT
		371
	RSTV:	0		;RSTV:	ABSO RSTA
		370
	IRQV:	RSINT∧377	;IRQV:	ABSO RSINT
		371
	END